package org.example.common.util;


import lombok.experimental.UtilityClass;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 泛型工具类，用于简化泛型类型的解析和使用。
 */
@UtilityClass
public class GenericsUtil {

    /**
     * 获取指定类的泛型参数类型
     * @param <T>   泛型类型
     * @param cls   目标类
     * @param index 泛型参数的索引，从0开始
     * @return 泛型参数类型，如果不存在则返回null
     */
    @SuppressWarnings("unchecked")
    public static <T> Class<T> getTypeArgument(Class<?> cls, int index) {
        Type genericSuperclass = cls.getGenericSuperclass();
        if (genericSuperclass instanceof ParameterizedType) {
            ParameterizedType type = (ParameterizedType) genericSuperclass;
            Type[] arguments = type.getActualTypeArguments();
            if (index >= 0 && index < arguments.length) {
                return (Class<T>) arguments[index];
            }
        }
        return null;
    }
}
